package com.ywj.chatroom.multiroom.server.handler;

import com.ywj.chatroom.multiroom.server.session.SessionFactory;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.SimpleChannelInboundHandler;
import lombok.extern.slf4j.Slf4j;

//import java.nio.channels.Channel;
import io.netty.channel.Channel;

/**
 * 退出程序处理器
 * 1.两种情况，一种是连接断开，一种是异常    2.都要对应处理，把channel移除掉
 */
//我们独立写一个类，因为不是和聊天相关的了
@Slf4j
@ChannelHandler.Sharable
public class QuitHandler extends ChannelInboundHandlerAdapter {


    //连接断开的时候会触发 Inactive
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        //从 SessionFactory 中移除channel，断开了
        SessionFactory.getSession().unbind((Channel) ctx.channel());
        log.debug("{} 已经断开", ctx.channel());
    }

    //异常时会触发
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        SessionFactory.getSession().unbind((Channel) ctx.channel());
        log.debug("{} 已经异常断开，异常是：{}", ctx.channel(), cause.getMessage());
    }

}
